// 首先通过题目可以确定的是，不能从升级技能点数入手
// 从技能数量入手没有思路，那就只能从技能点数入手
// 可以发现的是，既然要让攻击力最高，那么获得的攻击力一定有一个最小值
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
const int N = 100010;
// 由此得出一个思路，找到所有得分中最少的得分，统计其余得分都不低于这个得分的总得分数
// 如果所需次数多于给定次数，说明答案应该在mid右边
// 如果少于，则最低加成应该在mid左边
// 时间复杂度：O(nlogn)
typedef long long LL;
int n, m;
int A[N], B[N];

LL all_num(int a, int b, int low)
{
    if (low >= a)
        return 0;
    // a - xb >= low
    // xb + low <= a  x == (a - low) / b;
    return ceil((double)(a - low) / b);
    // return sum;
}

bool check(int mid)
{
    LL num = 0;
    for (int i = 0; i < n; ++i)
        num += all_num(A[i], B[i], mid);
    return num <= (LL)m;
}

LL all_sum(int a, int b, int n)
{
    int l = a, r = a - b * (n - 1);
    return (LL)(l + r) * n >> 1;
}

int main()
{
    cin >> n >> m;
    for (int i = 0; i < n; ++i)
        cin >> A[i] >> B[i];
    int l = 0, r = 1e6;
    while (l < r)
    {
        int mid = (l + r) >> 1;
        if (check(mid))
            r = mid;
        else
            l = mid + 1;
    }
    // a + (a - b) + (a - 2b) + ...
    LL sum = 0;
    int cnt = 0;
    // cout << l <<endl;
    for (int i = 0; i < n; ++i)
        if (A[i] > l)
        {
            cnt += ceil(double(A[i] - l) / B[i]);
            sum += all_sum(A[i], B[i], ceil((double)(A[i] - l) / B[i]));
        }
    cout << (sum + (m - cnt) * l) << endl;
    // 这里为什么要+上(m - cnt) * l
    // 首先要明白二分出来的结果一定是一个满足条件的情况下的最小值
    // 说明如果最低是 l - 1 那么需要取的数一定比m多
    // 如果原来取出来的结果比 m 少，那么一定有几个是相等的也被取走了
    // 所以应该要 + 上 m - cnt
    return 0;
}